package org.dejavu.design.singleton;

/**
* <p>Title: Singleton</p>
* <p>Description:单例模式 </p>
* <p>Company: </p> 
* @author dejavu
* @date 2016-9-7 下午3:14:16
*/
public class Singleton {
	
	
	/**
	 * 私有构造方法，防止被实例化
	 */
	private Singleton(){
		System.out.println("create "+this.toString());
	}
	
	private static class SingletonFactory {
		private static Singleton instance = new Singleton();
	}
	
	/**
	 * 静态工程方法，创建实例
	 * 事实上，只有在第一次创建对象的时候需要加锁，之后就不需要了
	 * @return
	 */
//	public static Singleton getInstance(){
//		if (instance==null) {
//			synchronized (instance) {
//				if (instance==null) {
//					instance = new Singleton();
//				}
//			}
//		}
//		return instance;
//	}
	
	public static Singleton getInstance(){
		System.out.println("public static Singleton getInstance()");
		return SingletonFactory.instance;
	}
	/**
	 * 如果该对象被用户序列化，可以保证对象在序列化前后保持一致
	 * @return
	 */
	public Object readResolve(){
		System.out.println("public Object readResolve()");
		return getInstance();
	}
}
